<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                                "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>CodeExtinguisher: Website Management Tool</title>
	<link rel="stylesheet" href="docs.css" type="text/css">  
</head>
<body>
<a name="top"> </a>
<img src="docs.png">
<div id="container">
    <div id="toc">
        <ul>
            <li><h2>Installing the System</h2></li>
            <li><a href="#overview">Overview</a></li>
            <li><a href="#installation">Installation</a></li>
            <li><a href="#first_page">Setting Up Your First Page</a></li>
        </ul>

        <ul>
            <li><h2>Getting to know the system</h2></li>
            <li><a href="#controller_options">Controller Options</a></li>
            <li><a href="#yaml">To YAML Or Not To YAML</a></li>
            <li><a href="#codexvalidation">codexValidation</a></li>
            <li><a href="#codexforms">codexForms</a></li>
            <li><a href="#codexmessages">codexMessages</a></li>
            <li><a href="#codexlogin">codexLogin</a></li>
        </ul>

        <ul>
            <li><h2>Customizing the system</h2></li>
            <li><a href="#integrating_your_own_design">Integrating your own design</a></li>
            <li><a href="#creating_new_view_modes">Creating new view modes</a></li>
            <li><a href="#modifying_system_behavior">Modifying system behavior</a></li>
        </ul>

        <ul>
            <li><h2>Developing your own plugins</h2></li>
            <li><a href="#plugin_overview">Overview</a></li>
            <li><a href="#loading_your_own_resources">Loading Your Own Resources</a></li>
            <li><a href="#whats_available_in_the_scope">What's Available in the Scope?</a></li>
            <li><a href="#distributing_your_plugins">Distributing Your Plugins</a></li>
        </ul>
    	<div class="clear"></div>
	</div>
	<div id="documentation" class="column span-50 first last">
		<h1><a name="overview">Overview</a></h1>
		<p>CodeExtinguisher is a CodeIgniter application which makes creating a CRUD insanely easy. The system creates a single-entry/exit point through you can control the content of your site. The System was designed with one thing in mind: Rapid Development. As a result, you can see from the provided example that you can get a page up with only one, small controller file. The controller simply provides the parameters necessary for the system to know what you want to edit and what you want the client to see.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a>
		<h1><a name="installation"> Installation </a></h1>
		<p>Setting up the system is incredibely easy. First download and unzip the download, then upload it to your server. The next step is setting up your premissions. Navigate to system/application/backend/config/ and change the permissions for the <b>database.php</b> file to 777 so that the installer can update it.</p>
		
		<p> Now open your web browser and point it to http://yourwebsite.com/ And run the installer. Once you run the installer, you must remove the installer.php file from your server. This is a necessary step. After you remove installer.php, you can simply go back to http://yourwebsite.com/ and click "Access the Backend" which will take you to the login screen.</p>
		
		<p> If you would rather setup the database on your own, Here is the sql you need to run in order to get everything setup. Note that you also have to update the database.php file yourself.
		
		<div class="code">
	    	<pre>
	CREATE TABLE IF NOT EXISTS  `ci_sessions` (
      session_id varchar(40) DEFAULT '0' NOT NULL,
      ip_address varchar(16) DEFAULT '0' NOT NULL,
      user_agent varchar(50) NOT NULL,
      last_activity int(10) unsigned DEFAULT 0 NOT NULL,
      PRIMARY KEY (session_id)
    );

    CREATE TABLE `users` (
      `id` int(11) NOT NULL auto_increment,
      `username` varchar(40) NOT NULL,
      `password` varchar(40) NOT NULL,
      `access_level` int(11) NOT NULL,
      PRIMARY KEY  (`id`)
    );
    INSERT INTO `users` (
        `id` ,
        `username` ,
        `password` ,
        `access_level`
    )
    VALUES (
        NULL , 'username', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '1'
    );

	CREATE TABLE `template` (
        `id` int(11) NOT NULL auto_increment,
        `checkbox_test` set('yes','no') NOT NULL,
        `date_test` date NOT NULL,
        `dropdown_test` varchar(100) NOT NULL,
        `editor_test` text NOT NULL,
        `file_test` varchar(100) NOT NULL,
        `password_test` varchar(100) NOT NULL,
        `radiogroup_test` varchar(100) NOT NULL,
        `sessiondata_test` varchar(100) NOT NULL,
        `textarea_test` text NOT NULL,
        `textbox_test` varchar(100) NOT NULL,
        `time_test` int(11) NOT NULL,
        PRIMARY KEY (`id`)
    );
	    	</pre>
		</div>
	
		<p class="important">Note: This sql sets up a table called template . This is a table that is needed for the bundled template to work. You don't need it for the system to work.</p>
		<p class="important">Note: You may want to change the permissions on database.php back to its original setting before releasing your website, as a security measure.</p>
		
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="first_page">Setting Up Your First Page</a></h1>
		<p>To setup your first page using the CodeExtinguisher Backend System, it is useful to reference the bundled template. It can be found in backend/controllers/template.php.</p>
		<p>Here's a copy of the template controller:</p>
		
		<div class="code">
	    	<pre>
&lt;?php 
include("codexcontroller.php");

class Template extends codexController 
{ 
    function Template () 
    { 
        codexController::codexController();
        $this-&gt;load-&gt;library('spyc');                
        $this-&gt;load-&gt;helper('inflector');

        $config = array(
                    'db_table' =&gt; 'template',
                    'form_setup' =&gt; $this-&gt;spyc-&gt;YAMLLOAD('definitions/template_form.yml'),
                    'controller_name' =&gt; 'Template',
                    'list_text' =&gt; array('textbox_test','textarea_test'),
                    );

        $this-&gt;setConfig($config);
    } 
}
?&gt;
		    </pre>
		</div>
		
		<p>You may notice that this example uses the bundled spyc library to parse a YAML file. This is absolutely optional, refer to the "To YAML or Not To YAML?" section for more information.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="controller_options">Controller Options</a></h1>
		<p>The system takes 13 options. Here's is a list of them and their respective purposes:</p>
		
		<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
			<tr>
				<th>Required</th>
				<th>Type</th>
				<th>Default</th>
				<th>Option</th>
				<th>Description</th>
				<th>Example</th>
			</tr><tr>
			
				<td class="td"><strong>Yes</strong></td>
				<td class="td">string</td>
				<td class="td">No Default value</td>
				<td class="td">db_table</td>
				<td class="td">Defines the database table to use in the current controller.</td>
				<td class="td">'db_table'=&gt;'blog',</td>
			</tr><tr>
			
				<td class="td"><strong>Yes</strong></td>
				<td class="td">associative array</td>
				<td class="td">No Default value</td>
				<td class="td">form_setup</td>
				<td class="td">This is the form definition of your array. The form is created from these parameters.</td>
				<td class="td"> See the "Customizing your Forms" section.  </td>
			</tr><tr>
			
				<td class="td"><strong>Yes</strong></td>
				<td class="td">string</td>
				<td class="td">No Default value</td>
				<td class="td">controller_name</td>
				<td class="td">The controller name as it appears in the class definition.</td>
				<td class="td">'controller_name'=&gt; 'Blog'</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">string</td>
				<td class="td">controller_name</td>
				<td class="td">list_header</td>
				<td class="td">This is the header displayed before the list in your list-view page.</td>
				<td class="td">'list_text'=&gt;'Template Page',</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">array</td>
				<td class="td">The keys of form_setup</td>
				<td class="td">list_text</td>
				<td class="td">This is the list of table field which will show up in the list. Usually you would choose the most descriptive fields here. If you don't provide a list, it will print all the fields.</td>
				<td class="td">'list_text'=&gt;array('name'),</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">string</td>
				<td class="td">empty string</td>
				<td class="td">order_type</td>
				<td class="td">This defined what type of sorting you want; either asc or desc.</td>
				<td class="td">'order_type'=&gt;'asc',</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">string</td>
				<td class="td">empty string</td>
				<td class="td">order_by</td>
				<td class="td">This defined what field you are going to oranize the list in.</td>
				<td class="td">'order_by'=&gt;'title',</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">associative array</td>
				<td class="td">empty array</td>
				<td class="td">table_access_restriction</td>
				<td class="td">This defined the criteria you want to be matched when pulling the data for the list view.</td>
				<td class="td">'table_access_restriction' =&gt; array('user_id'=&gt;'foo'), Would generate: ( WHERE `user_id` = 'foo' )</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">integer</td>
				<td class="td">The value in config.php</td>
				<td class="td">on_one_page</td>
				<td class="td">This defined how many records are displayed on each page when paginated.</td>
				<td class="td">'on_one_page'=&gt;10</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">string</td>
				<td class="td">empty string</td>
				<td class="td">form_prefix</td>
				<td class="td">This is the form prefix, it goes before the label of each element.</td>
				<td class="td">'form_prefix'=&gt;'&lt;div class="form-element"&gt;'</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">string</td>
				<td class="td">empty string</td>
				<td class="td">form_suffix</td>
				<td class="td">This is the form suffix, it goes after the input field of each element.</td>
				<td class="td">'form_prefix'=&gt;'&lt;/div&gt;'</td>
			</tr><tr>
			
				<td class="td"><strong>No</strong></td>
				<td class="td">associative array</td>
				<td class="td">empty array</td>
				<td class="td">rules</td>
				<td class="td">This is the array used to setup form validation. Refer to CodeIgniter's Validation library documentation for instructions on how to setup the array.</td>
				<td class="td">array('name'=&gt; 'trim|required')</td>
			</tr><tr>
			
			
				<td class="td"><strong>No</strong></td>
				<td class="td">associative array</td>
				<td class="td">empty array</td>
				<td class="td">messages</td>
				<td class="td">Contains the array which defines the messages to be relayed to the user. Possible keys are: add_success, add_failure, edit_success, edit_failure, edit_no_change, delete_success, delete_failure, upload_success, upload_failure, upload_remove_success, upload_remove_failure</td>
				<td class="td">See 'Customizing Your Messages' Section</td>
			</tr>
		
		</table>
	
		<h3>Customizing Your Messages</h3>
		<p>Customizing the messages is extremely simple. To change the default messages, simply add a messages option in your controller. Here's an example:</p>
		<div class="code">
			<pre>
$messages['add_success'] = 'Hurray for personalized messages!';
$messages['upload_remove_success'] = 'Oh hai i delete ur filz!';

$config = array(
            'messages' =&gt; $messages
            );
			</pre>
		</div>
		<p>As you can see, we only defined two messages here. You don't have to define all or none of the messages, you can only define the ones you want to change. Here's a list of the available messages, their role, and their default values:</p>
		
		<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
			<tr>
			    <th>Name</th>
			    <th>Role</th>
			    <th>Default Message</th>
			</tr><tr>
			
				<td class="td"><strong>add_success</strong></td>
				<td class="td">Is displayed when an item is added successfully</td>
				<td class="td">Item was added successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>add_failure</strong></td>
				<td class="td">Is displayed when an item is not added successfully</td>
				<td class="td">Item was not added successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>edit_success</strong></td>
				<td class="td">Is displayed when an item is edited successfully</td>
				<td class="td">Item was edited successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>edit_no_change</strong></td>
				<td class="td">Is displayed when an item is submitted, without making any changes</td>
				<td class="td">There was no change to apply!</td>
			</tr><tr>
			
				<td class="td"><strong>delete_success</strong></td>
				<td class="td">Displayed when an item is successfully removed from the database</td>
				<td class="td">Item was deleted successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>delete_confirm</strong></td>
				<td class="td">Displayed to confirm a deletion</td>
				<td class="td">You are about to permanently delete an item.</td>
			</tr><tr>
			
				<td class="td"><strong>delete_confirm_link</strong></td>
				<td class="td">Contains the text that's displayed in the confirmation button</td>
				<td class="td">It's ok, go ahead.</td>
			</tr><tr>
			
				<td class="td"><strong>delete_failure</strong></td>
				<td class="td">Is displayed when an item is not deleted successfully</td>
				<td class="td">Item was not deleted successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>upload_success</strong></td>
				<td class="td">Is displayed when a file is uploaded successfully</td>
				<td class="td">Associated file was uploaded successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>upload_failure</strong></td>
				<td class="td">Is displayed when a file is not uploaded successfully</td>
				<td class="td">Associated file was not uploaded successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>upload_remove_success</strong></td>
				<td class="td">Is displayed when a file is deleted successfully</td>
				<td class="td">Associated file was deleted successfully.</td>
			</tr><tr>
			
				<td class="td"><strong>upload_remove_failure</strong></td>
				<td class="td">Is displayed when a file is not deleted successfully</td>
				<td class="td">Associated file was not deleted successfully.</td>
			</tr>
		
		</table>
	
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="yaml">To YAML or Not To YAML?</a></h1>
		<p>As noted in the "Setting up your first page" section, the system comes bundled with YAML capability. Those familiar with Symfony know exactly what I am talking about, to others, YAML is simply a human-friendly markup language. The choice of whether or not to use YAML is totally up to you. Here are the pros and cons of it:</p>
		
		<h3>Pros</h3>
		<ul>
		    <li>Extremely easy to write, read and maintain</li>
		    <li>Keeps your controllers tidy</li>
		    <li>Separates your array info into a separate file you can maintain independently</li>
		</ul>
		<h3>Cons</h3>
		<ul>
		    <li>Adds overhead (adds the time it takes to parse the file)</li>
		    <li>Adds a file that you need to create and manage</li>
		</ul>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="codexvalidation">codexValidation</a></h1>
		<p>The system comes with a library called codexValidation. This is actually the stock validation library which ships with CodeIgniter. This version however, uses the codexMessages library to communicate with the user. It does this to provide a more uniform way of reporting errors. Validation errors are displayed as 'warning' messages to the user. You can, however, change the prefix and the suffix of these messages in the constructor of the codexForms library located in backend/libraries/.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="codexforms">codexForms</a></h1>
		<p>To create a form, you simply define the plugins you want to use in your controllers. The keys in your setup refer to the names of the plugins. The value, is another array with the following setup: A required 'class' attribute, which defines what class to associate the plugin with. Optional label, attributes, value and params attributes give the system more information and let you control all aspects of the plugin.</p>
		<p>The 'label' attribute defines the label to be shown alongside the form field. If you don't define a label, then it'll use a humanized version of the name attribute. However, this requires the inflector helper to be loaded. If it is not, then it will simply capitalize the first letter of the name attribute. You can also define a 'value' attribute which will give the element an initial value. Next, you can define an 'attributes' attribute which is an array. The keys of the array refer to the name of the attribute, and the value of the array to the value of the attribute. Finally, you can define a 'params' attribute to provide extra attributes required by that element.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="codexmessages">codexMessages</a></h1>
		<p>The bundled codexMessages library provides a way for the system to communicate with the user. It takes 3 types of messages by default: success, failure, and info. The wrappers for these types can be set independently using the setWrappers() method.</p>
		<p>New types of messages can be created on the fly just by specifying a new type.</p>
		
		<h2>How messages are stored:</h2>
		<p>Flashdata is a special kind of session data. It is stored in the database as a serialized array. When a flashdata item is first set, it is marked as "new", then on the next request (usually the next page loaded), it is marked as "old" and can be retrieved using the flashdata() function (called on codexsession). For validation errors however, we need them to be displayed instantly (not on the next request), to do that, we need to manually set them as old using the $mark_as_old option.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="codexlogin">codexLogin</a></h1>
		<p>The codexLogin library was designed to work behind the scenes. Your controllers shouldn't have any login logic in them. All you need to do to secure controllers is to add the rules to the access_levels.php file in backend/config/.</p>
		
		<p>The $config array in the access_levels.php file takes controller names (as they appear in the url), and optionally methods, as keys, their value identifies the level of security.
		The levels are integers, 0 being public by convention. The public_level config item, defines the level which is public and unsecured. Any controller who's level is set to the same one as $config['public_level'] will not require login. If a controller doesn't have any definition, it will have the value of $confi['default_level'] applied to it. </p>
		
		<h2>How information is stored:</h2>
		<p>The session_id and the user_id are stored as userdata (in a session) to check for login. However, other information such as validation errors and system errors are stored as flashdata.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="integrating_your_own_design">Integrating Your Own Design</a></h1>
		<p>CodeExtinguisher uses a very simple layout structure to create its pages. If you would like to integrate the look of your website into CodeExtinguisher, then all you need to do is update the header file, and the css.</p>
		<p>CodeExtinguisher templates are stored in system/application/backend/views/templates by default (Althought you can change that in your config.php file). There are two main components in a CodeExtinguisher template. The header, and the various view files. 
		Apart from the Management page (which displays all the records), Here is a list of the view files you might want to edit:</p>
		<h2>codex_delete_confirm.php</h2>
		<p>This file is loaded when a user tries to delete a record, and needs to confirm his action.</p>
		
		<h2>codex_form_view.php</h2>
		<p>This file is loaded when a user is adding or editing a record.</p>
		
		<p>Because the view modes are separate from the template, you may need to modify those files as well. They reside in the system/application/backend/views/layout_styles directory.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="creating_new_view_modes">Creating New View Modes</a></h1>
		<p>If you want to create your own view modes, you may do so easily. CodeExtinguisher ships with two premade views: list, and table. They are both located in the system/application/backend/views/layout_styles directory.</p>
		<h2>What's available for you in the view files:</h2>
		<p>Because the files are loaded in codexcontroller.php, you can use any of the member variables directly using $this-&gt;. Moreover, you may access any information stored in the libraries simply by referring to them. For example, to get the name of the controller, you may use $this-&gt;codexadmin-&gt;controller_name. It is recommended that you familiarize yourself with those variables if you want to develop your own views.</p>
		<p>As far as the actual records, they are automatically passed to the view as $entries.</p>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="modifying_system_behavior">Modifying System Behavior</a></h1>
		<p>If you would like to modify how a certain page handles addition, edition, and deletion, that too, is really easy with CodeExtinguisher. Because all CodeExtinguisher controllers inherit the codexcontroller, you can overload any of the methods defined there and pre/post process the data as you wish. For example, if you would like to be notified by email whenever a new item is inserted, you would add this function in your controller:</p>
		
		
		<div class="code">
		    <pre>
        function insertNewItem(){
            $this-&gt;codexadmin-&gt;insertNewItem();
            
            $this-&gt;load-&gt;library('email');

            $this-&gt;email-&gt;from('your@your-site.com', 'Your Name');
            $this-&gt;email-&gt;to('someone@some-site.com'); 

            $this-&gt;email-&gt;subject('Email from the website');
            $this-&gt;email-&gt;message('A new item was created.');	

            $this-&gt;email-&gt;send();


            $this-&gt;codextemplates-&gt;setTitle('Add a new item to: '.$this-&gt;list_header);
            $this-&gt;codextemplates-&gt;printHTML();
        }
		    </pre>
		</div>
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="plugin_Overview">Overview</a></h1>
		<p>The plugin architecture in CodeExtinguisher is one of its most important features. In CodeExtinguisher, plugins are form elements which can be as simple, or as complex as your heart desires. Take the TextBox plugin for example, it's as basic as they come, displaying a textbox, and filling it with information if it is set. On the other hand, there's the ManyToMany plugin which handles not only one, but three tables and makes sure data integrity remains through additions, editions, and deletions.</p>
		<p>In order to use any of the CodeIgniter or CodeExtinguisher libraries/functions, you will need to load the CI instance, you can do that by adding $CI = &amp;get_instance(); in your functions, where $CI become the global CI object.</p>
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="loading_your_own_resources">Loading your own Resources</a></h1>
		<p>With the addition of the CodexTemplates library, you can now handle the loading of your resources (css and javascript files) right in your plugin. To see a list of available functions, checkout the <a href="function_reference.html#codextemplates">CodexTemplates function reference.</a></p>
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="whats_available_in_the_scope">What's Available in the Scope?</a></h1>
		<p>For anything other than the most basic of HTML elements, you will need to overload some methods of CodexForms, and you will need to access various data about what is happening.</p>
		
		<h3>$CI-&gt;codexadmin-&gt;active_id</h3>
		<p>The active_id member variable of the CodexAdmin library contains the record id of the record of interest. For example, when you're deleting, active_id will hold the id of the record being deleted. When you're displaying information, active_id will hold the id of the record which contains the information, and so on...</p>
		
		<h3>Hooks and Callbacks</h3>
		<p>CodeExtinguisher imploys both Callbacks and Hooks to make sure plugins always have a change to handle the process in any which way they see fit.</p>
		
		<h4>Hooks:</h4>
		<p>There are four hooks that you can overload in your plugins. There are preInsertHook, postInsertHook, preEditHook, and postEditHook. They are fairly self explanatory.</p>
		
		<h4>Callbacks:</h4>
		<p>Callbacks are similar to regular functions in many ways. However, they differ in their purpose. The following callbacks have special behavior and are called automatically in certain events. There are a few callbacks which you can overload in your plugins. These are prepForDisplay, prepForDb, prepForDelete, and getFieldName. prepForDisplay gets called whenever the data is to be presented to the user. This usually means when they are viewing the list of records. prepForDb gets called everytime before information is inserted/updated into the database. prepForDelete gets called whenever a record is being deleted. And finally, getFieldName gets called when the system is constructing a query and needs to know if the field name needs special handling.</p>
		<p>One important feature to note with callbacks however, is that if, in any of the callbacks, you return NULL, then that information will be omitted from the results. So, if you return NULL for prepForDb, then nothing will get inserted into the database. This feature is used for example in the ManyToMany plugin where there is no field in the table which corresponds to the plugin.</p>
		
		<h3>Requirements for your plugins:</h3>
		<p> There are various requirements that every plugin should have: </p>
		
		<h4>The Constructor</h4>
		<p>Each plugin's constructor should take two parameters: $name, and $params. Each plugins constructor must also call codexForms's initiate method like so: codexForms::initiate($name,$params);</p>
		
		<h4>The getHTML() function</h4>
		<p>This is another required function. It generates the HTML for your plugin which will be displayed in the form. Note, that the function <b>returns</b> the html, and doesn't print it to the screen itself.</p> 
		
		<a class="back-to-top" href="#top">Back to Top</a><h1><a name="distributing_your_plugins">Distributing Your Plugins</a></h1>
		<p>Once you have written your plugin and tested it, go to http://codeExtinguisher.com and create an account and then simply post the plugin and share it with the world :)</p>
		<a class="back-to-top" href="#top">Back to Top</a>
	</div>
</div>
</body>
</html>